Typically, a software-based service is composed by selecting a number of software "components" when the service is designed. A component is a computer program designed to perform a specific function and, if required, communicate or interact with other components. The interactions between the selected components are also defined when the service is composed. The components and interactions are usually selected by a service software designer to achieve the functionality of the desired service.
For example, to compose a stock quote service, a designer may select a first component to receive a stock quote feed from the Internet, a second component to search the stock quote feed for specific stocks at specific prices, and a third component to send an e-mail message to a user when such stocks are found. Once the interactions between the components are defined, the software-based service has been created. The service can be thought of as a software "agent" that performs a function for the user.
There are serval problems, however, with using this "static" service composition architecture. As used herein, the word "static" refers to events that are fixed at the time software is created. Because the selected components and interactions are fixed when the service is designed, it may be difficult to change them "dynamically" when the service is executed. As used herein, the words "dynamic" and "dynamically" refer to events occurring at the general time software is executed or run. With the static service composition architecture, the resulting service is typically built as a monolithic application that is difficult to enhance or modify. This may make changing the functionality of a software-based service a very time-consuming and expensive task.
For example, if a user wanted the stock quote service to send a message to a pager, instead of sending an e-mail message, the major parts of the service may have to be recomposed, retested and reinstalled, all of which may require the efforts of specially trained software designers and programers. It may also be difficult, for example, to reconfigure the service to perform an entirely new function, such as creating a graph of a stock price. Similarly, a user may not be able to take advantage of an upgraded version of an component without recomposing the entire service.
Even if a dynamic service composition software architecture is provided, such as, for example, the ones disclosed in U.S. patent application Ser. No. 08/951,581 entitled "Method and Apparatus for Providing a Dynamic Service Composition Software Architecture," it may still be difficult to select the desired components at the time the service is designed. It may also be difficult to "configure" the selected components, such as by selecting the desired interactions between the components. If it is too difficult to select and configure the components, the benefits of dynamic composition described above may be reduced.
Moreover, it may be desirable to select and configure components using a communication network. For example, a user may want to select components from a large pool of possible components. In this case, it may not be practical to store the entire pool of components on a user's computer. Instead, the components may be stored on one or more computers that interact with the user's computer through the communication network. Such an arrangement may also let new components be added to the pool, and let the components in the pool be frequently updated. Because components are accessed through the communication network, a small fee may also be conveniently charged for the software-based service and/or for the individual components, by implementing, for example, a micro-billing arrangement. Additionally, the software-based service and/or individual components may be more efficiently executed on one or more other computers that interact with the user's computer through the communication network.
In view of the foregoing, it can be appreciated that a substantial need exists for an architecture that allows the dynamic composition of a software-based service using a communication network, and solves the other problems discussed above.